import clone from '@/lib/clone';
import createId from '@/lib/createId';
import router from '@/router';
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)
const store= new Vuex.Store<RootState>({
    state: {
        recordList: [],
         createRecordError:null,
        tagList: [],
       currentTag: undefined
  } as RootState,
    mutations: {
        setCurrentTag(state,id:string) {
            state.currentTag  = state.tagList.filter((t) => t.id === id)[0];
        },
      fetchRecords (state) {
      state.recordList= JSON.parse(window.localStorage.getItem('recordList') || "[]")as RecordItem[]
          if (!state.tagList || state.tagList.length === 0) {
              store.commit('createTag', '衣服');
              store.commit('createTag', '食物');
              store.commit('createTag', '住宿');
              store.commit('createTag', '出行');
          }
        },
        updateTag(state, payload: { id: string, name: string }) {
            const {id,name}=payload
           const idList = state.tagList.map(item => item.id);
        if (idList.indexOf(id) >= 0) {
            const names = state.tagList.map(item => item.name);
            if (names.indexOf(name) >= 0) {
              window.alert('标签名重复了')
            } else {
                const tag = state.tagList.filter(item => item.id === id)[0]
                tag.name = name;
                store.commit('saveTags');
             } 
           }
        },
        removeTag(state,id:string){
       let index = -1;
        for (let i = 0; i <= state.tagList.length; i++) {
            if (state.tagList[i].id === id) {
                index = i;
                break;
            }
        }
            if (index >= 0) {
            state.tagList.splice(index, 1);
                store.commit('saveTags')
                router.back();
            } else {
            window.alert('删除失败')
            }
},
      createRecord(state, record:RecordItem) {
      const record2 = clone(record);
      record2.createdAt = new Date().toISOString();
      state.recordList.push(record2);
          store.commit('saveRecords');
         
    },
      saveRecords(state) {
          window.localStorage.setItem('recordList',
              JSON.stringify(state.recordList));
        },
      fetchTags(state) {
   state.tagList=  JSON.parse(
          window.localStorage.getItem('tagList') || "[]")
      
        },
       createTag(state,name: string) {
      const names=state.tagList.map(item =>item.name)
        if (names.indexOf(name) >= 0) {
            window.alert("该标签名重复了");
           
        }
        const id = createId().toString();
        state.tagList.push({ id, name: name });
        store.commit('saveTags')
        
        
   
        },
        saveTags(state) {
            window.localStorage.setItem('tagList',
                JSON.stringify(state.tagList));
        },
        
  },
  actions: {
  },
  modules: {
  }
})



export default store;